///PHILOTES Source Code.  (C)2012 PhiloLabs

#pragma once

#include "PhiloPrerequisites.h"
#include "core/refcounted.h"

namespace Philo
{

class _PhiloGearsExport Object : public Core::RefCounted
{
	__DeclareClass(Object);
public:

	Object();
	Object(const Util::String& name);	
	virtual ~Object();

	virtual const Util::String&	getName(void) const;
	virtual void						setName(const Util::String& name);

	virtual const Util::String&	getType(void) const = 0;
	virtual const Util::String&	getCategory(void) const = 0;

	virtual bool						isVisible(void) const;
	virtual void						setVisible(bool visible);

protected:
	Util::String		m_Name;
	bool				m_Visible;


};

//------------------------------------------------------------------------------
inline const Util::String& Object::getName( void ) const
{
	return m_Name;
}
//------------------------------------------------------------------------------
inline void Object::setName( const Util::String& name )
{
	m_Name = name;
}
//------------------------------------------------------------------------------
inline bool Object::isVisible( void ) const
{
	return m_Visible;
}
//------------------------------------------------------------------------------
inline void Object::setVisible( bool visible )
{
	m_Visible = visible;
}



} // namespace Philo